package impl

import (
	"fmt"
	"sync"
)

var lock = &sync.Mutex{}

type singleston struct{}

var instance *singleston

// ！并发优化的懒汉单例模式
func GetInstance() *singleston {
	// 如果实例已创建则直接返回，避免加锁影响运行速度，它与创建操作不在同一个临界区间
	if instance == nil {
		lock.Lock()
		defer lock.Unlock()

		// 将判断与创建置于相同的临界区间
		if instance == nil {
			fmt.Println("创建单个实例")
			instance = new(singleston)
		} else {
			fmt.Println("已创建单个实例！")
		}
	}

	return instance
}
